package com.quanyan.stadium.service.commonComponent;

import com.quanyan.stadium.api.req.ReqRecordGameScheduleResult;
import com.quanyan.stadium.entity.TbGameEvent;

import java.util.List;

/**
 * Created by xiao.xiao on 2016/7/21.
 *
 * 运动场,赛事相关的消息推送
 */
public interface GameMsgPush {

    /**
     *官方赛事到了报名阶段,开始推送报名资格的用户,当前赛事.点击查看详情，跳转对应的赛事详情页  (暂时没有被涉及到)
     *
     * */
    void pushJoinOfficialGameEventAccessUser(TbGameEvent tbGameEvent, List<Integer> uids);
    /**
     *某一轮对战表生成,推送给用户.点击消息跳转“我的比赛页面”
     *
     * */
    void pushGeneraterCompListToUser(List<Integer> currentUids, TbGameEvent tbGameEvent);

    /**
     *轮次结束给用户推送消息.点击查看详情，跳转“我的比赛”
     *
     * */
    void pushGameRoundEndToUser(List<Integer> totalUids, TbGameEvent tbGameEvent);

    /**
     *推送上一轮用户晋级.点击消息跳转“我的比赛页面”
     *
     * */
    void pushGameRoundEndToWinUser(List<Integer> winUids, TbGameEvent tbGameEvent);

    /**
     *推送上一轮用户未晋级
     *
     * */
    void pushGameRoundEndToFailUser(List<Integer> failUids, TbGameEvent tbGameEvent);
    /**
     *赛事完结推送给所有人
     *
     * */
    void pushGameFinishPushMsgToUser(TbGameEvent tbGameEvent, List<Integer> uIds);

    /**
     * 小球类: 获取的第一名推送
     *
     * */
    void pushTeamTypePersonMsgToUserFirst(Integer uid, TbGameEvent tbGameEvent);
    /**
     * 小球类: 获取的第二名推送
     *
     * */
    void pushTeamTypePersonMsgToUserSecond(Integer uid, TbGameEvent tbGameEvent);

    /**
     * 大球类: 获取的第一名推送
     *
     * */
    void pushTeamTypeClubMsgToUserFirst(List<Integer> uids, TbGameEvent tbGameEvent);
    /**
     * 大球类: 获取的第二名推送
     *
     * */
    void pushTeamTypeClubMsgToUserSecond(List<Integer> uids, TbGameEvent tbGameEvent);
    /**
     *  赛事取消,推送给所有人
     *
     * */
    void pushGameCancelMsgToUser(List<Integer> uids, TbGameEvent tbGameEvent);
    /**
     * 用户录入比分存在争议. 点击查看详情，跳转对应的赛事管理页
     * */
    void pushRecordScoreDisputeMsgToUser(ReqRecordGameScheduleResult req, TbGameEvent tbGameEvent,List<Integer> uids,long time);

    /**
     * 赛事开始,推送消息给用户
     * */
    void pushGameStartMsgToUser(TbGameEvent tbGameEvent, List<Integer> uids);

    /**
     * 赛事前1小时开始,推送消息给用户
     * */
    void pushBeforeOneHourGameStartMsgToUser(TbGameEvent tbGameEvent, List<Integer> uids);

    /**
     * 报名成功消息推送 1
     */
    void pushGameSignSuccess(List<Integer> uids,TbGameEvent gameEvent);

    /**比赛完成
     *
     * @param tbGameEvent
     */
    void gameFinish(TbGameEvent tbGameEvent);

    /**
     * 比赛逾期提醒（isExpired true：已经逾期，false:快要逾期）
     * @param tbGameEvent
     * @param uids
     * @param isExpired
     */

    /**
     * 双打报名提醒
     * @param friendName:自己的名字
     * @param uid:受邀请者的id
     * @param tbGameEvent
     */

     void doubleGamePust(TbGameEvent tbGameEvent, String friendName,Integer uid);

    /**
     *
     * @param tbGameEvent
     * @param uids
     * @param isExpired
     */
     void gameExpireMsg(TbGameEvent tbGameEvent, List<Integer> uids, Boolean isExpired);

    /**
     * 录入比分
     * @param tbGameEvent
     * @param uids
     */
     void inputScore(TbGameEvent tbGameEvent,List<Integer> uids,String inputerName,long time);

    /**
     * 比分录入有争议，比赛结束，通知参赛选手
     *
     * @param tbGameEvent
     * @param uids
     */
    void vitiationScore(TbGameEvent tbGameEvent,List<Integer> uids);

    /**
     * 结束掉比赛开始但报名人数未满的比赛
     *
     * */
    void unNormalEnd(TbGameEvent tbGameEvent,List<Integer> uids);


    /**
     * ****************************************************************************
     *   下面是只给管理员推送的消息
     * ****************************************************************************
     */

    /**
     * 有某一场比赛输入结果又异议
     */
    void gameScoreDisagree(TbGameEvent tbGameEvent);

    /**
     * 新报名参赛人员提醒
     * @param tbGameEvent
     */
    void newSignUser(TbGameEvent tbGameEvent);



    /**
     * 比赛开始1小时准备提醒
     * @param tbGameEvent
     */
    void gameStartBefore(TbGameEvent tbGameEvent);

    /**
     * 赛事被关闭
     * @param tbGameEvent
     */
    void gameIsOff(TbGameEvent tbGameEvent);

    /**
     * 比赛结束时间逾期提醒
     * @param tbGameEvent
     */
    void gameNearExpire(TbGameEvent tbGameEvent);

    /**
     * 逾期下架提示
     * @param tbGameEvent
     */
    void gameExpire(TbGameEvent tbGameEvent);
}
